package org.jiuling.validation.spring.annotation;

import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import org.jiuling.validation.spring.enums.MutualExclusionTpyeEnum;
import org.jiuling.validation.spring.handle.MutualExclusionValidator;

import java.lang.annotation.*;

/**
 * 互斥
 * @author 紫灵
 * @date 2024年10月27日 20时32分27秒
 */
@Constraint(validatedBy = MutualExclusionValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(MutualExclusions.class)
public @interface MutualExclusion {

    /**
     * 主字段
     * 类型为COEXIST时，主字段不能为空
     * @return 主字段
     */
    String value() default "";
    /** 字段 */
    String[] fields();
    /**
     * 互斥类型
     * 如果互斥类型为NOt_COEXIST，需要再指定fields中的两个字段
     * @return 互斥类型
     */
    MutualExclusionTpyeEnum type();
    /** 消息 */
    String message() default "";
    /** 组 */
    Class<?>[] groups() default {};
    /** 有效载荷 */
    Class<? extends Payload>[] payload() default {};

}
